home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / init_task.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  5.4 KB  |  195 lines

  1. #ifndef _LINUX__INIT_TASK_H
  2. #define _LINUX__INIT_TASK_H
  3.  
  4. #include <linux/rcupdate.h>
  5. #include <linux/irqflags.h>
  6. #include <linux/utsname.h>
  7. #include <linux/lockdep.h>
  8. #include <linux/ipc.h>
  9. #include <linux/pid_namespace.h>
  10. #include <linux/user_namespace.h>
  11. #include <linux/securebits.h>
  12. #include <net/net_namespace.h>
  13.  
  14. extern struct files_struct init_files;
  15.  
  16. #define INIT_KIOCTX(name, which_mm) \
  17. {                            \
  18.     .users        = ATOMIC_INIT(1),        \
  19.     .dead        = 0,                \
  20.     .mm        = &which_mm,            \
  21.     .user_id    = 0,                \
  22.     .next        = NULL,                \
  23.     .wait        = __WAIT_QUEUE_HEAD_INITIALIZER(name.wait), \
  24.     .ctx_lock    = __SPIN_LOCK_UNLOCKED(name.ctx_lock), \
  25.     .reqs_active    = 0U,                \
  26.     .max_reqs    = ~0U,                \
  27. }
  28.  
  29. #define INIT_MM(name) \
  30. {                                 \
  31.     .mm_rb        = RB_ROOT,                \
  32.     .pgd        = swapper_pg_dir,             \
  33.     .mm_users    = ATOMIC_INIT(2),             \
  34.     .mm_count    = ATOMIC_INIT(1),             \
  35.     .mmap_sem    = __RWSEM_INITIALIZER(name.mmap_sem),    \
  36.     .page_table_lock =  __SPIN_LOCK_UNLOCKED(name.page_table_lock),    \
  37.     .mmlist        = LIST_HEAD_INIT(name.mmlist),        \
  38.     .cpu_vm_mask    = CPU_MASK_ALL,                \
  39. }
  40.  
  41. #define INIT_SIGNALS(sig) {                        \
  42.     .count        = ATOMIC_INIT(1),                 \
  43.     .wait_chldexit    = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\
  44.     .shared_pending    = {                         \
  45.         .list = LIST_HEAD_INIT(sig.shared_pending.list),    \
  46.         .signal =  {{0}}},                    \
  47.     .posix_timers     = LIST_HEAD_INIT(sig.posix_timers),        \
  48.     .cpu_timers    = INIT_CPU_TIMERS(sig.cpu_timers),        \
  49.     .rlim        = INIT_RLIMITS,                    \
  50. }
  51.  
  52. extern struct nsproxy init_nsproxy;
  53. #define INIT_NSPROXY(nsproxy) {                        \
  54.     .pid_ns        = &init_pid_ns,                    \
  55.     .count        = ATOMIC_INIT(1),                \
  56.     .uts_ns        = &init_uts_ns,                    \
  57.     .mnt_ns        = NULL,                        \
  58.     INIT_NET_NS(net_ns)                                             \
  59.     INIT_IPC_NS(ipc_ns)                        \
  60.     .user_ns    = &init_user_ns,                \
  61. }
  62.  
  63. #define INIT_SIGHAND(sighand) {                        \
  64.     .count        = ATOMIC_INIT(1),                 \
  65.     .action        = { { { .sa_handler = NULL, } }, },        \
  66.     .siglock    = __SPIN_LOCK_UNLOCKED(sighand.siglock),    \
  67.     .signalfd_wqh    = __WAIT_QUEUE_HEAD_INITIALIZER(sighand.signalfd_wqh),    \
  68. }
  69.  
  70. extern struct group_info init_groups;
  71.  
  72. #define INIT_STRUCT_PID {                        \
  73.     .count         = ATOMIC_INIT(1),                \
  74.     .tasks        = {                        \
  75.         { .first = &init_task.pids[PIDTYPE_PID].node },        \
  76.         { .first = &init_task.pids[PIDTYPE_PGID].node },    \
  77.         { .first = &init_task.pids[PIDTYPE_SID].node },        \
  78.     },                                \
  79.     .rcu        = RCU_HEAD_INIT,                \
  80.     .level        = 0,                        \
  81.     .numbers    = { {                        \
  82.         .nr        = 0,                    \
  83.         .ns        = &init_pid_ns,                \
  84.         .pid_chain    = { .next = NULL, .pprev = NULL },    \
  85.     }, }                                \
  86. }
  87.  
  88. #define INIT_PID_LINK(type)                     \
  89. {                                \
  90.     .node = {                        \
  91.         .next = NULL,                    \
  92.         .pprev = &init_struct_pid.tasks[type].first,    \
  93.     },                            \
  94.     .pid = &init_struct_pid,                \
  95. }
  96.  
  97. #ifdef CONFIG_AUDITSYSCALL
  98. #define INIT_IDS \
  99.     .loginuid = -1, \
  100.     .sessionid = -1,
  101. #else
  102. #define INIT_IDS
  103. #endif
  104.  
  105. #ifdef CONFIG_SECURITY_FILE_CAPABILITIES
  106. /*
  107.  * Because of the reduced scope of CAP_SETPCAP when filesystem
  108.  * capabilities are in effect, it is safe to allow CAP_SETPCAP to
  109.  * be available in the default configuration.
  110.  */
  111. # define CAP_INIT_BSET  CAP_FULL_SET
  112. #else
  113. # define CAP_INIT_BSET  CAP_INIT_EFF_SET
  114. #endif
  115.  
  116. /*
  117.  *  INIT_TASK is used to set up the first task table, touch at
  118.  * your own risk!. Base=0, limit=0x1fffff (=2MB)
  119.  */
  120. #define INIT_TASK(tsk)    \
  121. {                                    \
  122.     .state        = 0,                        \
  123.     .stack        = &init_thread_info,                \
  124.     .usage        = ATOMIC_INIT(2),                \
  125.     .flags        = PF_KTHREAD,                    \
  126.     .lock_depth    = -1,                        \
  127.     .prio        = MAX_PRIO-20,                    \
  128.     .static_prio    = MAX_PRIO-20,                    \
  129.     .normal_prio    = MAX_PRIO-20,                    \
  130.     .policy        = SCHED_NORMAL,                    \
  131.     .cpus_allowed    = CPU_MASK_ALL,                    \
  132.     .mm        = NULL,                        \
  133.     .active_mm    = &init_mm,                    \
  134.     .se        = {                        \
  135.         .group_node     = LIST_HEAD_INIT(tsk.se.group_node),    \
  136.     },                                \
  137.     .rt        = {                        \
  138.         .run_list    = LIST_HEAD_INIT(tsk.rt.run_list),    \
  139.         .time_slice    = HZ,                     \
  140.         .nr_cpus_allowed = NR_CPUS,                \
  141.     },                                \
  142.     .tasks        = LIST_HEAD_INIT(tsk.tasks),            \
  143.     .ptraced    = LIST_HEAD_INIT(tsk.ptraced),            \
  144.     .ptrace_entry    = LIST_HEAD_INIT(tsk.ptrace_entry),        \
  145.     .real_parent    = &tsk,                        \
  146.     .parent        = &tsk,                        \
  147.     .children    = LIST_HEAD_INIT(tsk.children),            \
  148.     .sibling    = LIST_HEAD_INIT(tsk.sibling),            \
  149.     .group_leader    = &tsk,                        \
  150.     .group_info    = &init_groups,                    \
  151.     .cap_effective    = CAP_INIT_EFF_SET,                \
  152.     .cap_inheritable = CAP_INIT_INH_SET,                \
  153.     .cap_permitted    = CAP_FULL_SET,                    \
  154.     .cap_bset     = CAP_INIT_BSET,                \
  155.     .securebits     = SECUREBITS_DEFAULT,                \
  156.     .user        = INIT_USER,                    \
  157.     .comm        = "swapper",                    \
  158.     .thread        = INIT_THREAD,                    \
  159.     .fs        = &init_fs,                    \
  160.     .files        = &init_files,                    \
  161.     .signal        = &init_signals,                \
  162.     .sighand    = &init_sighand,                \
  163.     .nsproxy    = &init_nsproxy,                \
  164.     .pending    = {                        \
  165.         .list = LIST_HEAD_INIT(tsk.pending.list),        \
  166.         .signal = {{0}}},                    \
  167.     .blocked    = {{0}},                    \
  168.     .alloc_lock    = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock),        \
  169.     .journal_info    = NULL,                        \
  170.     .cpu_timers    = INIT_CPU_TIMERS(tsk.cpu_timers),        \
  171.     .fs_excl    = ATOMIC_INIT(0),                \
  172.     .pi_lock    = __SPIN_LOCK_UNLOCKED(tsk.pi_lock),        \
  173.     .timer_slack_ns = 50000, /* 50 usec default slack */        \
  174.     .pids = {                            \
  175.         [PIDTYPE_PID]  = INIT_PID_LINK(PIDTYPE_PID),        \
  176.         [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID),        \
  177.         [PIDTYPE_SID]  = INIT_PID_LINK(PIDTYPE_SID),        \
  178.     },                                \
  179.     .dirties = INIT_PROP_LOCAL_SINGLE(dirties),            \
  180.     INIT_IDS                            \
  181.     INIT_TRACE_IRQFLAGS                        \
  182.     INIT_LOCKDEP                            \
  183. }
  184.  
  185.  
  186. #define INIT_CPU_TIMERS(cpu_timers)                    \
  187. {                                    \
  188.     LIST_HEAD_INIT(cpu_timers[0]),                    \
  189.     LIST_HEAD_INIT(cpu_timers[1]),                    \
  190.     LIST_HEAD_INIT(cpu_timers[2]),                    \
  191. }
  192.  
  193.  
  194. #endif
  195.